﻿class WasCell extends BaseCell {

    CalculateNextState() {

        //        (1) Eine Leerzelle, in deren Nachbarschaft sich Gras befindet, wird durch ein neues Grasbüschel belegt.

        //(2) Eine mit Gras besetzte Zelle wird mit einem Schaf belegt, wenn sich mindestens ein Schaf in der Umgebung befindet.

        //(3) Ein Schaf wird durch einen neuen Wolf ersetzt, wenn sich mindestens ein Wolf in der Nachbarschaft befindet.

        //(4) Hat ein Schaf kein Gras in seiner Umgebung, so wird es durch eine Leerzelle ersetzt.

        //(5) Hat ein Wolf kein Schaf als Nachbar, so wird er ebenfalls durch eine Leerzelle ersetzt.

        //(6) In allen anderen Fällen findet keine Umwandlung statt.

        switch (this.State) {
            case CellState.Dead:
                if (this.grid.GetNrOfNeighbourCellsOfState(CellState.Gras, this.x, this.y) > 0)
                    this.NextState = CellState.Gras;
                break;
            case CellState.Gras:
                if (this.grid.GetNrOfNeighbourCellsOfState(CellState.Sheep, this.x, this.y) > 0)
                    this.NextState = CellState.Sheep;
                break;
            case CellState.Sheep:
                if (this.grid.GetNrOfNeighbourCellsOfState(CellState.Wolf, this.x, this.y) > 0)
                    this.NextState = CellState.Wolf;
                else if (this.grid.GetNrOfNeighbourCellsOfState(CellState.Gras, this.x, this.y) == 0)
                    this.NextState = CellState.Dead;
                break;
            case CellState.Wolf:
                if (this.grid.GetNrOfNeighbourCellsOfState(CellState.Sheep, this.x, this.y) == 0)
                    this.NextState = CellState.Dead;

        }

        //var nrOfNeighboursAlive = this.grid.GetNrOfNeighbourCellsOfState(CellState.Alive, this.x, this.y);
        //if (nrOfNeighboursAlive % 2 == 0)
        //    this.NextState = CellState.Dead;
        //else
        //    this.NextState = CellState.Alive;

    }

} 